package day06;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/*
@Author: 王少杰
@Date: 2025/1/6
@Time: 14:05
@FileName: Demo03.java
@描述:
Map:类似于Python中的字典。存放键值对
    Java Map 接口。键唯一的、无序的、可变的
    实现类:
        HashMap :哈希表方式存储键值对
        TreeMap :树的方式存储键值对
        ConcurrentHashMap :线程安全，用哈希的方式存储
*/
public class Demo03 {
    public static void main(String[] args) {
        //key,value的类型
        Map<String,String> map = new HashMap<>();
        //添加元素:put  jmeter beanshell:处理器    局部变量、全局变量
        map.put("CNY","人名币");
        map.put("USD","美元");
        map.put("JPY","日元");
        map.put("AUD","澳大利亚元");
        map.put("GBP","英镑");
        map.put("HKD","港元");
        map.put("HKD","HongKongDollar");
        System.out.println(map);

        //删除元素
        map.remove("GBP");
        System.out.println(map);
        //查询元素
        System.out.println(map.containsKey("AUD"));
        System.out.println(map.containsValue("港元"));
        System.out.println(map.get("GBP"));//根据key获取value
        System.out.println(map.getOrDefault("GBP", "英镑"));//如果key不存在，会返回后面的默认值
        System.out.println(map.getOrDefault("HKD", "港元"));//key存在，会返回key对应的value

        System.out.println(map.size());

        //遍历map
        map.keySet().forEach(System.out::println);

        System.out.println("所有key:" + map.keySet());
        for (String key : map.keySet()) {
            System.out.println(key + ":" + map.get(key));
        }
        System.out.println();

        System.out.println("所有的value:" + map.values());//Collection<String>
        System.out.println("所有的键值对" + map.entrySet());

        Set<Map.Entry<String,String>> set = map.entrySet();
        for (Map.Entry<String,String> entry : set) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        System.out.println();


        String test = "abd abfsbanbajbnannakn";
        System.out.println(count(test));


        String test1 = "This is a test How are you younare very good";
    }

    //定义一个静态方法，统计字符串中每个字符出现的次数，结果用map存储。
    public static Map<Character,Integer> count(String string) {
        Map<Character,Integer> map = new TreeMap<>();
        //遍历字符串
        for (int i = 0; i < string.length(); i++) {
            //获取一个字符，判断在map中是否存在
            char c = string.charAt(i);
            //存在的话，根据key获取value，次数+1，再存放进去
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            }
            //不存在的话，将key，1写进map中
            else {
                map.put(c, 1);
            }
            //同上面的if-else效果
            //map.put(c,map.getOrDefault(c,1) + 1);
        }
        return map;
    }
}
